import rclpy #导入ros的客户端库，必备步骤
from rclpy.node import Node #rclpy.node是ros客户端库自带的Node类，用于创建节点
import random
from std_msgs.msg import UInt32

class GodNode(Node):  #采用面向对象(OOP)的方式建立node； 定义了一个GodNode的类，继承rclpy.node中的Node；
    def __init__(self,name):  #定义初始化方法；或者叫构造函数。。(构造函数是个人的理解，源自C++)
        super().__init__(name) #调用父类初始化，需要传入参数name，通常name是实例化的Node的名称，即节点名字；比如本例子中节点名字是 God
        self.get_logger().info("GodNode初始化成功！")  #get_logger().info是rclpy.node中的方法；
        #在这里意思是，当这个GodNode节点实例化的时候，输出一句日志；

        self.diceGame=self.create_publisher(UInt32,"diceGame",10) #
        timer_period = 2  #每2s
        self.timer = self.create_timer(timer_period, self.diceGame_callback)  #启动一个定时器，每5s调用一次diceGame_callback函数

    def diceGame_callback(self):
        diceNum=UInt32()
        diceNum.data=random.randint(1,6)
        self.diceGame.publish(diceNum) #将骰子的数字发布出去
        self.get_logger().info("成功掷了一次骰子" )
        
def main(args=None):  #main函数，程序执行的主入口
    rclpy.init(args=args)  # 初始化客户端库，必备步骤
    node=GodNode("God")  # 新建节点对象，必备步骤；传入God，将GodNode实例化
    rclpy.spin(node)   # spin循环节点,保持节点运行，检测是否收到退出指令（Ctrl+C），必备步骤
    rclpy.shutdown()  # 关闭客户端库，必备步骤